#include <Arduino.h>
#include <Adafruit_NeoMatrix.h> //点亮LED矩阵需要的库
#include "my_font.h"            //引用文字库头文件
#include "anim.h"            //引用我们自定义的动画头文件

//像素阵列定义
#define kMatrixWidth   32             //宽度
#define kMatrixHeight  8              //高度
#define BRIGHTNESS     100            //默认亮度 0-255
#define BRIGHTNESS_INTERVAL 30        //亮度调节间隔
#define LED_PIN        8              //像素阵列引脚

Adafruit_NeoMatrix *matrix;     //LED矩阵类指针

//像素矩阵初始化
void InitLED_Matrix(void)
{
  //设置像素矩阵的方向以及排列方式
  matrix = new Adafruit_NeoMatrix(32, 8, LED_PIN, NEO_MATRIX_TOP + NEO_MATRIX_LEFT+
    NEO_MATRIX_COLUMNS +  NEO_MATRIX_ZIGZAG,
    NEO_GRB + NEO_KHZ800);
  matrix->setTextWrap(false);       //设置文字是否自动换行
  matrix->setFont(&Picopixel);      //设置字体
  matrix->clear();                  //清除当前显示内容
  matrix->setBrightness(BRIGHTNESS);//设置亮度
}

//显示信息
void ShowMessage(Adafruit_NeoMatrix *matrix, char *message, int len, uint32_t color)
{
  //清除上一次的显示内容
  matrix->clear();

  //设置文本颜色
  matrix->setTextColor(color);
  
  //如果显示的内容过长，或者过小
  if (len < 1 || len > 8)
    return;
  
  //设置鼠标光标的位置用以确定在哪里显示文字
  //X轴自动居中
  matrix->setCursor(1 + (8 - len) * 2, 5); 

  //将显示的内容输出至缓存中
  matrix->print(message);

  //显示缓存中的内容
  matrix->show();
}

void setup() 
{
  //初始化LED矩阵显示
  InitLED_Matrix();                 

  //显示 6 个字符，显示内容：Hello!，显示颜色：绿色(R,G,B)
  ShowMessage(matrix, "Hello!", 6, matrix->Color(0, 255, 0));
  delay(2000);
}

void loop() 
{
  static char disp_buf[50] = {0};
  static int hour = 12;
  static int minute = 59;
  static int second = 0;
  static int week = 2;

  matrix->clear();//清屏
  matrix->setTextColor(matrix->Color(0, 0, 80));//设置文本颜色
  matrix->setCursor(3, 5);//设置显示起始坐标
  sprintf(disp_buf, "%02d:%02d:%02d\0", hour, minute, second);//格式化时间字符串
  matrix->print(disp_buf);//显示时分秒
  weekBarDisplay(matrix,week);//显示周（特殊的显示方式）
  matrix->show();//更新显示

  delay(1000);
  
  second = second + 1;
  if( second > 59 ) second = 0;
}
















  // //清除之前的显示内容
  // matrix->clear();
  // //设置雨滴特效
  // showRainingCode(matrix);
  // //显示内容
  // matrix->show();
  // //控制雨滴下落速度
  // delay(250);